OpenPyXLを使ってPythonでエクセルファイルを作成する

OpenPyXLを使ってPythonでエクセルファイルを作成する

OpenPyXLの雰囲気やおおよその使い方を把握できました。
Clock Icon2024.07.04

Pythonを使ってエクセルファイルを作成することになりそうなので、どのような方法で実現できるのかを軽く調べて試してみました。本記事ではOpenPyXLを利用します。軽く試すだけですが、実現できることはたくさんあります。公式ドキュメントをご確認ください。

おすすめの方

  • Pythonでエクセルファイルを作成したい方
  • OpenPyXLの雰囲気を知りたい方

openpyxlをインストールする

pip install openpyxl

お試しのPythonコード

from openpyxl import Workbook
from openpyxl.styles import Font, PatternFill, Alignment

DATA = [
    ["日時", "温度", "湿度"],
    ["2024-07-01 00:00:00", 20, 50],
    ["2024-07-01 00:10:00", 21.1, 51],
    ["2024-07-01 00:20:00", 22.2, 52],
    ["2024-07-01 00:30:00", 23.3, 53],
    ["2024-07-01 00:40:00", 24.4, 54],
    ["2024-07-01 00:50:00", 25.5, 55],
]

SHEET1_NAME = "テスト1"
SHEET2_NAME = "テスト2"

def main():
    wb = Workbook()

    ws = wb.active
    ws.title = SHEET1_NAME

    for row in DATA:
        ws.append(row)

    # 1行目を太字にして、背景色をつけて、中央寄せにする
    ft = Font(bold=True)  # 太字
    fill = PatternFill(
        fill_type="solid",  # シンプルな塗りつぶし
        start_color="ADD8E6", end_color="ADD8E6",  # 開始と終了が同じ色(グラデーション無し)
    )
    alignment = Alignment(horizontal="center", vertical="center")

    for row in ws["A1:C1"]:
        for cell in row:
            cell.font = ft
            cell.fill = fill
            cell.alignment = alignment

    # 数値のフォーマットを設定する
    for row in ws.iter_rows(
        min_row=2, max_row=len(DATA),  # データのある行(2行目〜7行目)
        min_col=2, max_col=3,  # データのある列(B列〜C列)
    ):
        for cell in row:
            cell.number_format = "0.0"

    # 新しいシートを作成する
    ws2 = wb.create_sheet(title=SHEET2_NAME)
    ws2.cell(row=2, column=1, value="最高値")
    ws2.cell(row=3, column=1, value="平均値")
    ws2.cell(row=4, column=1, value="最低値")

    ws2.cell(row=1, column=2, value="温度")
    ws2.cell(row=2, column=2, value=f"=MAX('{SHEET1_NAME}'!B:B)")  # B列(温度)の最大値
    ws2.cell(row=3, column=2, value=f"=AVERAGE('{SHEET1_NAME}'!B:B)")  # B列(温度)の平均値
    ws2.cell(row=4, column=2, value=f"=MIN('{SHEET1_NAME}'!B:B)")  # B列(温度)の最小値

    ws2.cell(row=1, column=3, value="湿度")
    ws2.cell(row=2, column=3, value=f"=MAX('{SHEET1_NAME}'!C:C)")  # C列(湿度)の最大値
    ws2.cell(row=3, column=3, value=f"=AVERAGE('{SHEET1_NAME}'!C:C)")  # C列(湿度)の平均値
    ws2.cell(row=4, column=3, value=f"=MIN('{SHEET1_NAME}'!C:C)")  # C列(湿度)の最小値

    # 保存する
    wb.save("sample.xlsx")

if __name__ == "__main__":
    main()

作成したエクセルファイル

テスト1 シート

各種スタイルの設定もできています。

01_created_excel

テスト2 シート

エクセル関数も使えました。

02_created_excel

03_created_excel

さいごに

Pythonでエクセルファイルを作成してみました。
OpenPyXLの雰囲気やおおよその使い方を把握できました。
公式ドキュメントには、他にもたくさんの機能が書かれているので、参考にしてください。

参考

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.